package com.hmall.config;

import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.rsa.crypto.KeyStoreKeyFactory;

import java.security.KeyPair;
/*它的主要功能是：
告诉 Spring 容器该类包含 Bean 的定义（通常与@Bean注解配合使用）
替代传统的 XML 配置文件，以 Java 代码的形式进行配置
在应用启动时会被 Spring 自动扫描和处理
简单来说，它让 Spring 知道这个类是专门用来配置应用程序组件的。*/
@Configuration
/*这段代码的功能是启用并绑定JwtProperties类的配置属性。具体说明如下：
作用：@EnableConfigurationProperties是Spring Boot的注解，用于激活指定配置类
（这里是JwtProperties）与外部配置（如application.yml）的绑定。
效果：通过该注解，JwtProperties类中定义的字段会自动注入配置文件
（如jwt.token-expiration等前缀）对应的值，无需手动解析配置。*/
@EnableConfigurationProperties(JwtProperties.class)
public class SecurityConfig {

    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }

    @Bean
    public KeyPair keyPair(JwtProperties properties){
        // 获取秘钥工厂
        KeyStoreKeyFactory keyStoreKeyFactory =
                new KeyStoreKeyFactory(
                        properties.getLocation(),
                        properties.getPassword().toCharArray());
        //读取钥匙对
        return keyStoreKeyFactory.getKeyPair(
                properties.getAlias(),
                properties.getPassword().toCharArray());
    }
}